AlteryxのFormula式における変換いろいろ
こんにちは、小澤です。
みなさん、AlteryxのFormulaツールやFilterツールは使ってますか? これらは、多くのツールが存在するAlteryxの中でも比較的利用頻度の高いツールだと思われます。
これらのツールではFormula式を使って処理内容を記述します。 Formula式はワークフローの作成方法と同様、同じことを実現するにしても複数の書き方が考えられます。
今回は、その中から文字列と整数の変換などを行う関数について書いていきます。
どんな関数を紹介するの?
今回は、Conversionにある関数たちを紹介していきます。
よく使うなーと思うものから、ほとんど使わないなーと思うものまで様々あります。 全部見ていきましょう!
関数紹介
では、どんどん紹介していきます。
BinToInt関数
最初はいきなり「あんま使わないなー」な関数です。 この関数は文字列で2進数で書かれてたものを整数に変換します。 2進数そのものについての解説は本筋ではないため、「なにそれ?」って人はWikipediaあたりを参照してください。
Formula式の内容と結果をセットでご覧ください。
BinToInt([Bin])
2進数表記の数値が10進数の整数値に変換されています。 結果を見ると、
- 先頭が0埋めされていても正しく変換される
- 0と1以外が値が出てくるとそれ以降は無視される
- 小数点以下の値は扱えない
といった動きになっています。 2進数を扱うような場面では桁数を統一してあるような状況もよくあるので、0埋めに対応してるのはありがたいですね。
CharFromInt関数
続いては、数値として与えられた文字コードを文字に変換する関数です。 文字コードは、コンピュータで文字を表現するためにそれぞれの文字に振った番号のようなものです。
これも「あんま使わないなー」系に入ると想定される方もいるかもしれませんが、実は以下のマクロで利用しています。
では、CharFromInt関数を使ってみましょう。
CharFromInt([Char_Code])
結果は以下のようになります。
文字コードはUTF-8が利用されているようです。
CharToInt関数
こちらの関数は先ほどのCharFromIntと逆の処理を行います。 文字を文字コードに変換するわけです。
使ってみて結果を確認しましょう。
CharToInt([Char])
先ほどのCharFromIntの結果と比較して答えわせをすると、一致してるのが確認できます。
ConvertFromCodePage/ConvertToCodePage関数
こちらは、文字コードの変換を行う関数です。 先ほどのCharFromInt/CharToIntと同様、FromとToで逆の処理を行う関数になっています。
文字コードは列ごとに異なるということは通常無いのでMulti-Field Formulaでまとめて変換してみましょう。 以下のようなデータのCSVファイルがShift-JISで保存されているとします。
これを読み込むと以下のように文字化けします (※ CSVファイル読み込み時に文字コードの指定が可能ですが、関数の動きを確認するためあえて指定していません)
これに対して、Multi-Field Formulaツールで以下のように変換を行います。
ConvertFromCodePage([_CurrentField_], 932)
ConverFromCodePage/ConvertToCodePageの2つ目の引数は、文字コードの指定です。 対象はUTF-8となるため、ConvertFromCodePageではこの引数で指定した文字コードからUTF-8へ変換、ConvertToCodePageではUTF-8から指定した文字コードへの変換という処理になります。
Code Page一覧はAlteryxの公式ドキュメントに一覧があります。
今回は、Shift-JISからの変換なので932を指定しています。 結果は以下のようになります。
無事、変換ができました。
HexToNumber関数
HexToNumber関数はBinToInt関数の16進数版です。 関数の使い方と結果を見てみましょう。
HexToNumber([Hex])
- アルファベットの大文字小文字はどちらでもいい
- 先頭に0xをつけるのはNG
- マイナスはNG
といった感じのようです。
IntToBin/IntToHex関数
IntToBin/IntToHex関数はそれぞれBinToInt/HexToNumberの逆の変換を行う関数です。 先ほどのHexToNumberの結果をIntToHexを使って元に戻してみましょう。
IntToHex([Dec])
HexToNumberで変換できず0になってしまったものはそのままですが、元に戻っているのが確認できます。
ToNumber関数
ToNumber関数は、文字列を数値にする関数です。
ToNumber([str])
非常にわかりづらいですが、strが文字列、numが数値型になります。
途中に数字以外のものが入ってる場合はその直前までで変換され、最初から変換できない場合は0になります。
ちょっとみづらいですが、5行目は「.」で小数点以下の値を含む数値、6行目は「,」で桁の区切りが入ったものになっています。 前者は変換されていますが、後者は「,」が変換できないので、その直前までが数値になっています。
また、この関数は変換できなかった場合にConversion Errorが発生します。
この関数には3つのオプション引数があります。
ToNumber([str], 1, 1, ",")
- 2つ目の引数 : 1にすることでConversion Errorを出さないようにする
- 3つ目の引数 : 1にすることで変換できなかったものを0ではなくNullにする
- 4つ目の引数 : 小数点を表す文字「.」から別なものに変更する
これらを指定して同じデータに対して処理をすると以下のようになります。
4つ目の引数は任意の文字を指定できるわけではなく、「.」か「,」のどちらかのみとなりますので、ご注意ください。
ToString関数
さて、次はいよいよこのカテゴリ最後の関数です。 ここまで読んでいただいた方は名前で何をする関数か予想がつくかもしれません。
数値を文字列に変換する関数です。
ToString([num])
これも見た目の結果はわかりづらいですね...
この関数にもいくつかオプション引数があります。 まずは以下のように3津の引数を入れてみましょう。
ToString([num], 4, 1)
結果は以下のようになります。
2つ目の引数は、小数点以下を何桁まで表示するかになります。 出力のとおり、その桁数に満たないものは0埋めされ、多いものは四捨五入されています。
3つ目の引数は3桁ごとに区切り文字を入れるかになります。 デフォルトでは入れない設定になっていますが、この引数を1にすることで区切り文字として「,」を入れています。
続いて以下の引数で実行してみます。
ToString([num], 4, 1, ",")
結果は以下のようになりました。
少々わかりづらいかもしれませんが、小数点の文字が「,」になって、3桁ごとの区切りが「.」になりました。 こちらも指定可能な文字は「.」か「,」のみとなっています。
おわりに
今回は、AlteryxのFormula式における文字列や数値の変換となるConversionの関数について書きました。
このカテゴリの関数は他の関数と組み合わせて使う使う場面も多くなるかと思います。 今扱ってるデータが文字列なのか数値なのか意識しておかないと、足し算などをした際に思わぬ結果になったりするので、そういった場面でここで紹介した関数を使って変換してみるなどお試しください。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。